perm filename OPDECL.SAI[PNT,HE]9 blob sn#469117 filedate 1979-08-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002					REdefine
C00013 ENDMK
C⊗;
				REdefine
preload_array(name, defs, type, first, len)"[][]"=[
	preload_with defs null; type array name[first:first+len] ];

ifc false thenc			REdefine
preset_array(name, defs, type, first, len) "[][]"=[
	preset_with defs null; type array name[first:first+len] ];
endc
				REdefine

indices(name, postfix)"[][]"=[
    redefine xxcount=1;
    redefine xx(xxarg)=[
	redefine xxtemp= [ define xxarg]&[postfix=xxcount];
	xxtemp;
	redefine xxcount=xxcount+1;];
    name ];

	define op_list "[][]"=[
ZZ("≡",		eqv,		EXP_XX)
  XXX(XEQV,	#SC,120,#SC,	#SC,	0)
ZZ("EQV",	eeqv,		EXP_XX)
  XXX(XEQV,	#SC,120,#SC,	#SC,	0)
ZZ("∨",		or,		BEFACT_XX)
  XXX(XLOR,	#SC,120,#SC,	#SC,	0)
ZZ("OR",	oor,		BEFACT_XX)
  XXX(XLOR,	#SC,120,#SC,	#SC,	0)
ZZ("⊗",		xor,		BEFACT_XX)
  XXX(XXOR,	#SC,120,#SC,	#SC,	0)
ZZ("XOR",	xxor,		BEFACT_XX)
  XXX(XXOR,	#SC,120,#SC,	#SC,	0)
ZZ("∧",		and,		BFACT_XX)
  XXX(XAND,	#SC,120,#SC,	#SC,	0)
ZZ("AND",	aand,		BFACT_XX)
  XXX(XAND,	#SC,120,#SC,	#SC,	0)
ZZ("=",		seq,		BTERM_XX)
  XXX(XSEQ,	#SC,120,#SC,	#SC,	0)
ZZ("≠",		sne,		BTERM_XX)
  XXX(XSNE,	#SC,120,#SC,	#SC,	0)
ZZ(">",		sgt,		BTERM_XX)
  XXX(XSGT,	#SC,120,#SC,	#SC,	0)
ZZ("<",		slt,		BTERM_XX)
  XXX(XSLT,	#SC,120,#SC,	#SC,	0)
ZZ("≥",		sge,		BTERM_XX)
  XXX(XSGE,	#SC,120,#SC,	#SC,	0)
ZZ("≤",		sle,		BTERM_XX)
  XXX(XSLE,	#SC,120,#SC,	#SC,	0)
ZZ("+",		Plus,		AEXP_XX)
  XXX(XSPLUS,	#SC,100,#SC,	0,	0)
  XXX(XSADD,	#SC,120,#SC,	#SC,	0)
  XXX(XVPLUS,	#VT,100,#VT,	0,	0)
  XXX(XVADD,	#VT,120,#VT,	#VT,	0)
  XXX(XTVADD,	#TR,120,#VT,	#TR,	0)
  XXX(XTVADD,	#FRE,120,#VT,	#FR,	0)
  XXX(XTVADD,	#TR,120,#TR,	#VT,	0)
  XXX(XTVADD,	#FRE,120,#FR,	#VT,	0)
ZZ("-",		minus,		AEXP_XX)
  XXX(XSNEG,	#SC,100,#SC,	0,	0)
  XXX(XSSUB,	#SC,120,#SC,	#SC,	0)
  XXX(XVNEG,	#VT,100,#VT,	0,	0)
  XXX(XVSUB,	#VT,120,#VT,	#VT,	0)
  XXX(XTVSUB,	#TR,120,#TR,	#VT,	0)
  XXX(XTVSUB,	#FRE,120,#FR,	#VT,	0)
ZZ(".",		vdot,		TERM_XX)
  XXX(XVDOT,	#SC,120,#VT,	#VT,	0)
ZZ("*",		times,		TERM_XX)
  XXX(XSMUL,	#SC,120,#SC,	#SC,	0)
  XXX(XSVMUL,	#VT,120,#SC,	#VT,	0)
  XXX(XVSMUL,	#VT,210,#VT,	#SC,	0)
  XXX(XVCROSS,	#VT,120,#VT,	#VT,	0)
  XXX(XTVMUL,	#VT,120,#RT,	#VT,	0)
  XXX(XTTMUL,	#RT,120,#RT,	#RT,	0)
  XXX(XTVMUL,	#VT,120,#TR,	#VT,	0)
  XXX(XTTMUL,	#TR,120,#TR,	#TR,	0)
  XXX(XTTMUL,	#FRE,120,#TR,	#FR,	0)
  XXX(XTTMUL,	#FRE,120,#FR,	#TR,	0)
  XXX(XTTMUL,	#FRE,120,#FR,	#FR,	0)
ZZ("/",		sdiv,		TERM_XX)
  XXX(XSDIV,	#SC,120,#SC,	#SC,	0)
  XXX(XVSDIV,	#VT,120,#VT,	#SC,	0)
ZZ("MAX",	max,		TERM_XX)
  XXX(XMAX,	#SC,120,#SC,	#SC,	0)
ZZ("MIN",	min,		TERM_XX)
  XXX(XMIN,	#SC,120,#SC,	#SC,	0)
ZZ("DIV",	div,		TERM_XX)
  XXX(XIDIV,	#SC,120,#SC,	#SC,	0)
ZZ("MOD",	mod,		TERM_XX)
  XXX(XMOD,	#SC,120,#SC,	#SC,	0)
ZZ("REL",	rel,		FACTOR_XX)
  XXX(XVFREL,	#VT,210,#VT,	#TR,	0)
  XXX(XVFREL,	#VT,210,#VT,	#FR,	0)
  XXX(XFFREL,	#TR,210,#TR,	#TR,	0)
  XXX(XFFREL,	#TR,210,#TR,	#FR,	0)
  XXX(XFFREL,	#TR,210,#FR,	#TR,	0)
  XXX(XFFREL,	#TR,210,#FR,	#FR,	0)
ZZ("WRT",	wrt,		FACTOR_XX)
  XXX(XWRT,	#VT,210,#VT,	#TR,	0)
  XXX(XWRT,	#VT,210,#VT,	#FR,	0)
ZZ("→",		frontarrow,	FACTOR_XX)
  XXX(XFTOF,	#TR,120,#TR,	#TR,	0)
  XXX(XFTOF,	#TR,120,#TR,	#FR,	0)
  XXX(XFTOF,	#TR,120,#FR,	#TR,	0)
  XXX(XFTOF,	#TR,120,#FR,	#FR,	0)
ZZ("↑",		stos,		FACTOR_XX)
  XXX(XSEXP,	#SC, 120,#SC,	#SC,	0)
  XXX(XUPARROW,	#FRE,100,#TR,	0,	0)	! these two actually pf_XX;
  XXX(XUPARROW,	#FRE,100,#FR,	0,	0)
ZZ("¬",		not,		PF_XX)
  XXX(XNOT,	#SC,100,#SC,	0,	0)
ZZ("ORIENT",	orient,		PF_XX)
  XXX(XTORIEN,	#RT,100,#TR,	0,	0)
  XXX(XTORIEN,	#RT,100,#FR,	0,	0)
ZZ("UNIT",	uvect,		PF_XX)
  XXX(XUNITV,	#VT,100,#VT,	0,	0)
ZZ("AXIS",	axis,		PF_XX)
  XXX(XTAXIS,	#VT,100,#RT,	0,	0)
ZZ("POS",	pos,		PF_XX)
  XXX(XTPOS,	#VT,100,#TR,	0,	0)
  XXX(XTPOS,	#VT,100,#FR,	0,	0)
ZZ("INV",	rinv,		PF_XX)
  XXX(XTINVRT,	#RT,100,#RT,	0,	0)
  XXX(XTINVRT,	#TR,100,#TR,	0,	0)
  XXX(XTINVRT,	#TR,100,#FR,	0,	0)
ZZ("INT",	int,		PF_XX)
  XXX(XINT,	#SC,100,#SC,	0,	0)
ZZ("CONSTRUCT",	construct,	PF_XX)
  XXX(XCONSTR,	#TR,123,#VT,	#VT,	#VT)
  XXX(XFCONSTR,	#TR,123,#FR,	#FR,	#FR)
ZZ("SQRT",	sqrt,		PF_XX)
  XXX(XSQRT,	#SC,100,#SC,	0,	0)
ZZ("SIN",	sin,		PF_XX)
  XXX(XSIN,	#SC,100,#SC,	0,	0)
ZZ("COS",	cos,		PF_XX)
  XXX(XCOS,	#SC,100,#SC,	0,	0)
ZZ("TAN",	tan,		PF_XX)
  XXX(XTAN,	#SC,100,#SC,	0,	0)
ZZ("ASIN",	asin,		PF_XX)
  XXX(XASIN,	#SC,100,#SC,	0,	0)
ZZ("ACOS",	acos,		PF_XX)
  XXX(XACOS,	#SC,100,#SC,	0,	0)
ZZ("ATAN2",	atan2,		PF_XX)
  XXX(XATAN2,	#SC,120,#SC,	#SC,	0)
ZZ("LOG",	log,		PF_XX)
  XXX(XLOG,	#SC,100,#SC,	0,	0)
ZZ("EXP",	exp,		PF_XX)
  XXX(XEXP,	#SC,100,#SC,	0,	0)

ZZ("|",		MAGNITUDE,	PF_XX)
  XXX(XSABS,	#SC,100,#SC,	0,	0)
  XXX(XVMAGN,	#SC,100,#VT,	0,	0)
  XXX(XTMAGN,	#SC,100,#RT,	0,	0)
ZZ(["("],	LPAREN,		PF_XX)
ZZ(["( , , )"],	IMPLICIT,	PF_XX)
  XXX(XVMAKE,	#VT,123,#SC,	#SC,	#SC)
  XXX(XVSAXWR,	#RT,120,#VT,	#SC,	0)
  XXX(XTMAKE,	#TR,120,#RT,	#VT,	0)
ZZ("↓",		DOWNARROW,	PF_XX)
  XXX(XDWNARROW,	#FRE,100,#TR,	0,	0)
  XXX(XDWNARROW,	#FRE,100,#FR,	0,	0)
ZZ("$",		DOLLAR,		PF_XX)
  XXX(XDOLLAR,	#FRE,100,#TR,	0,	0)
  XXX(XDOLLAR,	#FRE,100,#FR,	0,	0)
ZZ("α",		ALPHA,		PF_XX)
  XXX(XALPHA,	#FRE,100,#TR,	0,	0)
  XXX(XALPHA,	#FRE,100,#FR,	0,	0)
ZZ("EVAL",	EVAL,		PF_XX)
  XXX(XEVAL,	#SC,100,#SC,	0,	0)
  XXX(XEVAL,	#VT,100,#VT,	0,	0)
  XXX(XEVAL,	#RT,100,#RT,	0,	0)
  XXX(XEVAL,	#TR,100,#TR,	0,	0)
  XXX(XEVAL,	#FR,100,#FR,	0,	0)
ZZ("FRAME",	FRAME,		PF_XX)
  XXX(XTMAKE,	#FR,120,#RT,	#VT,	0)
ZZ("VECTOR",	VECTOR,		PF_XX)
  XXX(XVMAKE,	#VT,123,#SC,	#SC,	#SC)
ZZ("TRANS",	TRANS,		PF_XX)
  XXX(XTMAKE,	#TR,120,#RT,	#VT,	0)
ZZ("ROT",	ROT,		PF_XX)
  XXX(XVSAXWR,	#RT,120,#VT,	#SC,	0)
ZZ("XCOORD",	coordx,		PF_XX)
  XXX(XGTXC,	#SC,100,#VT,	0,	0)
  XXX(XGTXC,	#SC,100,#TR,	0,	0)
  XXX(XGTXC,	#SC,100,#FR,	0,	0)
ZZ("YCOORD",	coordy,		PF_XX)
  XXX(XGTYC,	#SC,100,#VT,	0,	0)
  XXX(XGTYC,	#SC,100,#TR,	0,	0)
  XXX(XGTYC,	#SC,100,#FR,	0,	0)
ZZ("ZCOORD",	coordz,		PF_XX)
  XXX(XGTZC,	#SC,100,#VT,	0,	0)
  XXX(XGTZC,	#SC,100,#TR,	0,	0)
  XXX(XGTZC,	#SC,100,#FR,	0,	0)
];

REQUIRE "[][]" DELIMITERS;
REDEFINE ZZ(ARG0,ARG1,ARG2)=[XX(ARG1)];
REDEFINE XXX(ARGNAME,ARGTYPE,ARGORDER,ARG1,ARG2,ARG3)=[];

indices(op_list,_X) ;


DEFINE EXP_XX=1,BEFACT_XX=2,BFACT_XX=3,BTERM_XX=4,AEXP_XX=5,TERM_XX=6,
	FACTOR_XX=7, PF_XX=8;

DEFINE #PNTINTOPS=XXCOUNT-1;
DEFINE #OPERATORS=#PNTINTOPS;